package main

import (
	"log"
	"net/http"

	"demo2/config"
	"demo2/server/handlers"
	"demo2/server/services"
	"demo2/server/storage"

	"github.com/gin-gonic/gin"
)

func main() {
	log.Printf("[SERVER] 🚀 启动智能对话助手服务器...")
	
	// 加载配置
	log.Printf("[SERVER] 📋 加载配置...")
	cfg := config.Load()
	log.Printf("[SERVER] ✅ 配置加载完成，服务器地址: %s:%s", cfg.Server.Host, cfg.Server.Port)

	// 初始化Redis存储
	log.Printf("[SERVER] 📡 初始化Redis存储...")
	redisStore := storage.NewRedisStore(cfg.Redis)
	if err := redisStore.Connect(); err != nil {
		log.Fatal("[SERVER] ❌ 连接Redis失败:", err)
	}
	defer redisStore.Close()
	log.Printf("[SERVER] ✅ Redis连接成功")

	// 初始化服务
	log.Printf("[SERVER] 🤖 初始化LLM服务...")
	llmService := services.NewLLMService(cfg.DeepSeek)
	log.Printf("[SERVER] 🤖 初始化Agent聊天服务...")
	chatService := services.NewChatAgentService(redisStore, llmService)
	defer chatService.Close()

	// 初始化处理器
	log.Printf("[SERVER] 🔧 初始化Agent HTTP处理器...")
	chatHandler := handlers.NewChatAgentHandler(chatService)

	// 设置Gin路由
	log.Printf("[SERVER] 🌐 设置HTTP路由...")
	r := gin.Default()

	// 启用CORS
	r.Use(func(c *gin.Context) {
		c.Header("Access-Control-Allow-Origin", "*")
		c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
		c.Header("Access-Control-Allow-Headers", "Content-Type, Authorization, Cache-Control")
		
		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(http.StatusNoContent)
			return
		}
		
		c.Next()
	})

	// 静态文件服务
	r.Static("/static", "./web")
	r.StaticFile("/", "./web/index.html")

	// API路由
	api := r.Group("/api")
	{
		api.POST("/chat", chatHandler.SendMessage)
		api.POST("/chat/stream", chatHandler.SendStreamMessage) // 新增SSE路由
		api.GET("/chat/:sessionId/history", chatHandler.GetHistory)
		api.DELETE("/chat/:sessionId", chatHandler.ClearHistory)
		api.GET("/ws/:sessionId", chatHandler.WebSocketHandler)
		api.GET("/agent/stats", chatHandler.GetAgentStats)     // 新增Agent统计接口
		api.GET("/agent/tools", chatHandler.GetAvailableTools) // 新增工具列表接口
	}

	// 启动服务器
	addr := cfg.Server.Host + ":" + cfg.Server.Port
	log.Printf("[SERVER] 🌐 服务器启动在 http://%s", addr)
	log.Printf("[SERVER] 📋 支持功能:")
	log.Printf("[SERVER]   - 普通聊天: POST /api/chat")
	log.Printf("[SERVER]   - 流式聊天: POST /api/chat/stream (SSE)")
	log.Printf("[SERVER]   - WebSocket: GET /api/ws/:sessionId")
	log.Printf("[SERVER]   - Agent统计: GET /api/agent/stats")
	log.Printf("[SERVER]   - 工具列表: GET /api/agent/tools")
	log.Printf("[SERVER]   - 时间查询: 通过Agent智能识别")
	log.Printf("[SERVER]   - 数学计算: 通过Agent智能识别")
	log.Printf("[SERVER]   - 记忆搜索: 通过Agent智能识别")
	log.Printf("[SERVER] ✅ Agent服务器准备就绪，等待请求...")
	log.Fatal(r.Run(addr))
}
